/**
 * 认证管理器 - 处理全局登录状态和401错误
 */

// 保存登录组件的引用
let loginPopupRef = null;

/**
 * 设置登录组件引用
 * @param {Object} loginComponent - 登录组件实例
 */
function setLoginPopup(loginComponent) {
  console.log('authManager: 设置登录组件引用', loginComponent);
  if (loginComponent && typeof loginComponent.showPopup === 'function') {
    loginPopupRef = loginComponent;
    console.log('authManager: 成功设置登录组件引用');
  } else {
    console.error('authManager: 登录组件无效，缺少showPopup方法');
  }
}

/**
 * 弹出登录窗口
 * 当页面中存在登录组件时直接调用，否则跳转到首页并弹出登录
 */
function showLoginPopup() {
  console.log('authManager: 尝试显示登录弹窗');

  // 先尝试使用已保存的引用
  if (loginPopupRef) {
    console.log('authManager: 使用已缓存的登录组件');
    try {
      loginPopupRef.showPopup();
      console.log('authManager: 成功调用showPopup方法');
      return true;
    } catch (err) {
      console.error('authManager: 调用缓存组件方法失败', err);
      loginPopupRef = null; // 重置引用
    }
  } else {
    console.log('authManager: 无缓存的登录组件引用');
  }

  // 然后尝试在当前页面查找login组件
  const pages = getCurrentPages();
  console.log('authManager: 当前页面栈长度', pages.length);

  if (pages.length > 0) {
    const currentPage = pages[pages.length - 1];
    console.log('authManager: 当前页面路径', currentPage.route);

    try {
      const loginComponent = currentPage.selectComponent('#loginPopup');
      if (loginComponent) {
        console.log('authManager: 在当前页面找到登录组件');
        loginPopupRef = loginComponent;
        loginComponent.showPopup();
        return true;
      } else {
        console.log('authManager: 当前页面未找到登录组件');
      }
    } catch (err) {
      console.error('authManager: 查找当前页面组件失败', err);
    }
  }

  // 如果当前页面没有login组件，跳转到首页并弹出登录
  console.log('authManager: 准备跳转到首页并弹出登录');

  // 先确保所有toast已关闭
  wx.hideToast();

  // 显示加载提示
  wx.showLoading({
    title: '跳转中...',
    mask: true
  });

  // 延迟执行跳转，确保UI事件已完成
  setTimeout(() => {
    wx.switchTab({
      url: '/pages/index/index',
      success: () => {
        console.log('authManager: 跳转到首页成功');
        wx.hideLoading();

        // 延迟获取首页的登录组件
        setTimeout(() => {
          try {
            const pages = getCurrentPages();
            const indexPage = pages[pages.length - 1];
            console.log('authManager: 当前页面路径', indexPage.route);

            const loginComponent = indexPage.selectComponent('#loginPopup');
            if (loginComponent) {
              console.log('authManager: 在首页找到登录组件');
              loginPopupRef = loginComponent;
              loginComponent.showPopup();
            } else {
              console.error('authManager: 首页未找到登录组件');
              wx.showToast({
                title: '无法打开登录窗口，请重启应用',
                icon: 'none',
                duration: 3000
              });
            }
          } catch (err) {
            console.error('authManager: 尝试获取首页组件失败', err);
            wx.showToast({
              title: '系统错误，请重启应用',
              icon: 'none',
              duration: 3000
            });
          }
        }, 500);
      },
      fail: (err) => {
        console.error('authManager: 跳转到首页失败', err);
        wx.hideLoading();
        wx.showToast({
          title: '跳转失败，请重启应用',
          icon: 'none',
          duration: 2000
        });
      }
    });
  }, 300);

  return false;
}

/**
 * 重置登录状态
 */
function resetLogin() {
  console.log('authManager: 重置登录状态');
  // 清除登录信息
  wx.removeStorageSync('userInfo');
  loginPopupRef = null;
}

// 导出方法
module.exports = {
  setLoginPopup,
  showLoginPopup,
  resetLogin
}; 